using System;
using Microsoft.VisualStudio.Debugger.Interop;

namespace Red.Scripts.Debugger.Engine
{
    // And implementation of IDebugCodeContext2 and IDebugMemoryContext2. 
    // IDebugMemoryContext2 represents a position in the address space of the machine running the program being debugged.
    // IDebugCodeContext2 represents the starting position of a code instruction. 
    // For most run-time architectures today, a code context can be thought of as an address in a program's execution stream.
    class AD7MemoryAddress : IDebugCodeContext2, IDebugCodeContext100
    {
        public AD7MemoryAddress( AD7Engine engine, uint address )
        {
        }

        #region IDebugMemoryContext2 Members

        // Adds a specified value to the current context's address to create a new context.
        public int Add( ulong dwCount, out IDebugMemoryContext2 newAddress )
        {
            throw new NotImplementedException();
        }

        // Compares the memory context to each context in the given array in the manner indicated by compare flags, 
        // returning an index of the first context that matches.
        public int Compare( enum_CONTEXT_COMPARE uContextCompare, IDebugMemoryContext2[] compareToItems, uint compareToLength, out uint foundIndex )
        {
            throw new NotImplementedException();
        }

        // Gets information that describes this context.
        public int GetInfo( enum_CONTEXT_INFO_FIELDS dwFields, CONTEXT_INFO[] pinfo )
        {
            throw new NotImplementedException();
        }

        // Gets the user-displayable name for this context
        // This is not supported by the sample engine.
        public int GetName( out string pbstrName )
        {
            throw new NotImplementedException();
        }

        // Subtracts a specified value from the current context's address to create a new context.
        public int Subtract( ulong dwCount, out IDebugMemoryContext2 ppMemCxt )
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IDebugCodeContext2 Members

        // Gets the document context for this code-context
        public int GetDocumentContext( out IDebugDocumentContext2 ppSrcCxt )
        {
            throw new NotImplementedException();
        }

        // Gets the language information for this code context.
        public int GetLanguageInfo( ref string pbstrLanguage, ref Guid pguidLanguage )
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IDebugCodeContext100 Members

        // Returns the program being debugged. In the case of this sample
        // debug engine, AD7Engine implements IDebugProgram2 which represents
        // the program being debugged.
        int IDebugCodeContext100.GetProgram( out IDebugProgram2 pProgram )
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
